package cn.bdqn.mh.utils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.UUID;

/**
 * 文件上传工具类
 * @author zhang
 *
 */
public class FileUploadUtils {

	/**
	 * 允许上传的扩展名
	 */
	private static String filePattern="jpg,gif,png,jpeg";//这是定义上传文件类型
	
	
	public static String getFilePattern() {
		return filePattern;
	}
	public static void setFilePattern(String filePattern) {
		FileUploadUtils.filePattern = filePattern;
	}
	
	/**
	 * 这个方法是判断上传的文件名扩展名是否符合要求
	 * @param filename 要判断的文件名
	 * @return true符合，false不符合
	 */
	public static boolean checkFileIsValid(String filename) {
		String extname=filename.substring( filename.lastIndexOf(".")+1);//获取扩展名
		int ret=filePattern.indexOf(extname.toLowerCase());//查找下
		return ret==-1?false:true;
	}
	/**
	 * 获取一个随机uuid的文件名，
	 * @param filename 传入文件名
	 * @return 返回一个随机文件名扩展名为你传入的
	 */
	public static String getUUIDFileName(String filename) {
		//UUID是获取一个全球唯一随机字符串，作为文件名
		String name=UUID.randomUUID().toString().replace("-", "");
		return name+filename.substring(filename.lastIndexOf("."));				
	}
	/**
	 * 使用hash算法获取存储路径
	 * @param fileName 要保持的文件名，不要含路径
	 * @param parentPath  要保持文件所在的根路径
	 * @return  真正的储存路径
	 */
	public static String makePath(String fileName,String parentPath) {
		int fileHashcode=fileName.hashCode();//获取哈希值
		int dir1=fileHashcode& 0xf;
		int dir2=(fileHashcode&0xff0)>>8;//0-15之间数字不一样的
		//构建文件分散储存目录
		String uploadPath=parentPath+"/"+dir1;//+"/"+dir2;//目录		
		File saveDirectory=new File(uploadPath);		
		if(saveDirectory.exists()==false) {
			saveDirectory.mkdir();//创建目录1			
		}
		uploadPath+="/"+dir2;
		saveDirectory=new File(uploadPath);		
		if(saveDirectory.exists()==false) {
			saveDirectory.mkdir();//创建目录2			
		}
		return uploadPath+"/";
		
	}

	/**
	 * 实现保存文件
	 * @param file 字节流
	 * @param filepath 路径
	 * @param filename 文件名
	 */
	public static void uploadFile(byte[] file,String filepath,String filename)
			throws Exception {
		File targetFile=new File(filepath);
		if(targetFile.exists()==false){
			//如果路径不存在，那么创建路径
			targetFile.mkdir();//创建路径
		}
		FileOutputStream outputStream=new FileOutputStream(filepath+filename);
		outputStream.write(file);//写入
		outputStream.flush();
		outputStream.close();
	}
	/*
	public static void main(String[]args) {
	//	makePath("abclklk.png", "jhkjhdd");
	//	System.out.println(checkFileIsValid("ABC.doc"));
	}*/
}
